home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 September / PCWorld_2008-09_cd.bin / v cisle / sadanastroju / favloc-1.2-fx+tb.xpi / chrome / favloc.jar / content / favlocFile.js < prev    next >
Text File  |  2008-06-18  |  6KB  |  148 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is FavLoc
  15.  *
  16.  * The Initial Developer of the Original Code is Justin Scott.
  17.  * Portions created by the Initial Developer are Copyright (C) 2006
  18.  * the Initial Developer. All Rights Reserved.
  19.  *
  20.  * Contributor(s): (none)
  21.  *
  22.  * Alternatively, the contents of this file may be used under the terms of
  23.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  24.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  25.  * in which case the provisions of the GPL or the LGPL are applicable instead
  26.  * of those above. If you wish to allow use of your version of this file only
  27.  * under the terms of either the GPL or the LGPL, and not to allow others to
  28.  * use your version of this file under the terms of the MPL, indicate your
  29.  * decision by deleting the provisions above and replace them with the notice
  30.  * and other provisions required by the GPL or the LGPL. If you do not delete
  31.  * the provisions above, a recipient may use your version of this file under
  32.  * the terms of any one of the MPL, the GPL or the LGPL.
  33.  *
  34.  * ***** END LICENSE BLOCK ***** */
  35. var FavLoc;
  36.  
  37. var FavLocFile = {
  38.     //Populate file submenu from saved preferences
  39.     init: function() {
  40.         FavLoc = Components.classes['@fligtar.com/favloc;1'].getService().wrappedJSObject;
  41.         
  42.         var menu = document.getElementById('file-favloc');
  43.         var popup = document.getElementById("file-favloc-popup");
  44.         
  45.         if(!FavLoc.settings['show-file']) {
  46.                 menu.hidden = true;
  47.                 return false;
  48.         }
  49.         else
  50.             menu.hidden = false;            
  51.         
  52.         while(popup.hasChildNodes()) {
  53.             popup.removeChild(popup.firstChild);
  54.         }
  55.  
  56.         if(FavLoc.favorites.length > 0 && (FavLoc.names[0] != "" && FavLoc.favorites[0] != "")) {
  57.             for(var i = 0; i < FavLoc.favorites.length; i++) {
  58.                 if(FavLoc.favorites[i] != "" && FavLoc.names[i] != "") {
  59.                     var menuitem = document.createElement('menuitem');
  60.                     menuitem.setAttribute('label', FavLoc.names[i]);
  61.                     menuitem.setAttribute('value', FavLoc.favorites[i]);
  62.                                         menuitem.setAttribute('oncommand', 'FavLocFile.download(this);');
  63.                     //menuitem.addEventListener("command", function(e) { alert(this.value); alert(FavLoc.favorites[i]); new FavLocFile.download(this.value); }, false);
  64.                     popup.appendChild(menuitem);
  65.                 }
  66.             }
  67.         }
  68.         else {
  69.             var menuitem = document.createElement('menuitem');
  70.             menuitem.setAttribute('label', "(" + FavLoc.bundle.GetStringFromName("favloc.noneset") + ")");
  71.             menuitem.setAttribute('disabled', true);
  72.             popup.appendChild(menuitem);
  73.         }
  74.         
  75.         var menuitem = document.createElement('menuseparator');
  76.         popup.appendChild(menuitem);
  77.             
  78.         var menuitem = document.createElement('menuitem');
  79.         menuitem.setAttribute('id', "file-favloc-options");
  80.         menuitem.setAttribute('label', FavLoc.bundle.GetStringFromName("favloc.popup-options"));
  81.         menuitem.setAttribute('accesskey', FavLoc.bundle.GetStringFromName("favloc.popup-options-accesskey"));
  82.         menuitem.addEventListener("command", function(e) { new FavLocOptions.showOptions(); }, false);
  83.         popup.appendChild(menuitem);
  84.         
  85.         return true;
  86.     },
  87.     
  88.     //Download file
  89.     download: function(location) {
  90.                 location = location.getAttribute('value');
  91.                 
  92.         var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  93.         
  94.         if(prefs.getPrefType("extensions.favloc.savetype") == prefs.PREF_STRING) {
  95.             var saveType = prefs.getCharPref("extensions.favloc.savetype");
  96.         }
  97.         else {
  98.             var saveType = 'filename';
  99.         }
  100.                     
  101.         prefs = null;
  102.         
  103.         var aDocument = document.commandDispatcher.focusedWindow.document;
  104.         var url = aDocument.location.href;
  105.         var browser = FavLoc.getBrowserWindow();
  106.         
  107.         var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  108.         dir.initWithPath(location);
  109.         
  110.         //from saveDocument() contentAreaUtils.js
  111.         var contentDisposition = null;
  112.           try {
  113.             contentDisposition =
  114.               aDocument.defaultView
  115.                        .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
  116.                        .getInterface(Components.interfaces.nsIDOMWindowUtils)
  117.                        .getDocumentMetadata("content-disposition");
  118.           } catch (ex) {
  119.             // Failure to get a content-disposition is ok
  120.           }
  121.         
  122.         if(dir.exists()) {
  123.             var filename = browser.getDefaultFileName(null, browser.makeURI(url), aDocument, contentDisposition);
  124.  
  125.             if(filename.indexOf('.') == -1) {
  126.                 filename += '.' + browser.getDefaultExtension(aDocument.title, browser.makeURI(url), aDocument.contentType);
  127.             }
  128.             
  129.             filename = browser.validateFileName(filename);
  130.             dir.append(filename);
  131.             
  132.             //Check file existance
  133.             if(dir.exists()) {
  134.                 var newDir = FavLoc.handleOverwrite(filename, location, FavLoc.overwrite, window);
  135.                 if (newDir != false) {
  136.                     dir = newDir;
  137.                 }
  138.             }
  139.             
  140.             var chosenData = new browser.AutoChosen(dir, browser.makeURI(url));        
  141.             
  142.             browser.internalSave(url, aDocument, filename, contentDisposition, aDocument.contentType, false, null, chosenData, null, true);
  143.         } else {
  144.             alert(FavLoc.bundle.GetStringFromName("favloc.nolongerexists"));
  145.         }
  146.     }
  147.     
  148. };